perm filename MICRO.XGP[F77,JMC] blob
sn#340380 filedate 1978-03-10 generic text, type T, neo UTF8
/LMAR=0/XLINE=3/FONT#0=BAXL30/FONT#1=BAXM30/FONT#2=BAXB30/FONT#3=SUB/FONT#4=SUP/FONT#5=BASL35/FONT#6=NGR25/FONT#7=MATH30/FONT#8=FIX25/FONT#9=GRK30/FONT#10=ZERO30/FONT#11=BAXI30/FONT#12=FIX20/pmar=2500
␈↓ ↓H␈↓α␈↓ β~A MICRO-MANUAL FOR LISP - NOT THE WHOLE TRUTH
␈↓ ↓H␈↓␈↓ ¬aJohn McCarthy
␈↓ ↓H␈↓␈↓ ∧rArtificial Intelligence Laboratory
␈↓ ↓H␈↓␈↓ ¬GStanford University
␈↓ ↓H␈↓␈↓ α_LISP␈αdata␈αare␈αsymbolic␈α
expressions␈αthat␈αcan␈αbe␈α
either␈α␈↓↓atoms␈↓
␈↓ ↓H␈↓or␈α␈↓↓lists␈↓.␈α ␈↓↓Atoms␈↓␈αare␈αstrings␈αof␈αletters␈αand␈αdigits␈αand␈αother␈α
characters
␈↓ ↓H␈↓not␈α∂otherwise␈α∂used␈α∂in␈α∂LISP.␈α⊂ A␈α∂list␈α∂consists␈α∂of␈α∂a␈α⊂left␈α∂parenthesis
␈↓ ↓H␈↓followed␈α∂by␈α∂zero␈α∂or␈α∂more␈α⊂atoms␈α∂or␈α∂lists␈α∂separated␈α∂by␈α⊂spaces␈α∂and
␈↓ ↓H␈↓ending␈αwith␈αa␈αright␈αparenthesis.␈α Examples:␈αA,␈αONION,␈α(),␈α(A),␈α(A
␈↓ ↓H␈↓ONION A), (PLUS 3 (TIMES X PI) 1), (CAR (QUOTE (A B))).
␈↓ ↓H␈↓␈↓ α_The␈α~LISP␈α→programming␈α~language␈α→is␈α~defined␈α~by␈α→rules
␈↓ ↓H␈↓whereby␈α
certain␈αLISP␈α
expressions␈α
have␈αother␈α
LISP␈α
expressions␈αas
␈↓ ↓H␈↓␈↓↓values␈↓.␈α
The␈α
function␈αcalled␈α
␈↓↓value␈↓␈α
that␈α
we␈αwill␈α
use␈α
in␈α
giving␈αthese
␈↓ ↓H␈↓rules␈α∩is␈α∩not␈α∩part␈α∩of␈α∩the␈α∩LISP␈α∩language␈α∩but␈α∩rather␈α∩part␈α∩of␈α⊃the
␈↓ ↓H␈↓informal␈α⊃mathematical␈α⊃language␈α⊃used␈α⊃to␈α⊃define␈α⊃LISP.␈α⊃ Likewise,
␈↓ ↓H␈↓the␈α∂italic␈α∞letters␈α∂␈↓↓e␈↓␈α∞and␈α∂␈↓↓a␈↓␈α∞(sometimes␈α∂with␈α∞subscripts)␈α∂denote␈α∞LISP
␈↓ ↓H␈↓expressions,␈α∃the␈α∃letter␈α∃␈↓↓v␈↓␈α∃(usually␈α∃subscripted)␈α∃denotes␈α∃an␈α∀atom
␈↓ ↓H␈↓serving␈αas␈αa␈αvariable,␈αand␈αthe␈αletter␈α␈↓↓f␈↓␈αstands␈αfor␈αa␈αLISP␈αexpression
␈↓ ↓H␈↓serving as a function name.
␈↓ ↓H␈↓1. ␈↓↓value␈↓ (QUOTE ␈↓↓e)␈↓ = e. Thus the value of (QUOTE A) is A.
␈↓ ↓H␈↓2.␈α∂␈↓↓value␈↓␈α∂(CAR␈α∞␈↓↓e),␈↓␈α∂where␈α∂␈↓↓value␈α∞e␈↓␈α∂is␈α∂a␈α∞non-empty␈α∂list,␈α∂is␈α∂the␈α∞first
␈↓ ↓H␈↓element of ␈↓↓value e.␈↓ Thus ␈↓↓value␈↓ (CAR (QUOTE (A B C))) = A.
␈↓ ↓H␈↓3.␈α
␈↓↓value␈↓␈α(CDR␈α
e),␈α
where␈α␈↓↓value␈↓␈α
␈↓↓e␈↓␈α
is␈αa␈α
non-empty␈α
list,␈αis␈α
the␈α
the␈αlist
␈↓ ↓H␈↓that␈α⊂remains␈α⊂when␈α⊂the␈α⊂first␈α⊂element␈α⊂of␈α⊂␈↓↓value e␈↓␈α⊂is␈α⊂deleted.␈α⊂ Thus
␈↓ ↓H␈↓␈↓↓value␈↓ (CDR (QUOTE (A B C))) = (B C).
␈↓ ↓H␈↓4.␈α∩␈↓↓value␈↓␈α∪(CONS␈α∩␈↓↓e1␈↓␈α∪␈↓↓e2),␈↓␈α∩is␈α∪the␈α∩list␈α∪that␈α∩results␈α∪from␈α∩prefixing
␈↓ ↓H␈↓␈↓↓value e1␈↓␈α?␈α≤onto␈α?␈α≥the␈α?␈α≤list␈α?␈α≥␈↓↓value e2.␈↓␈α?␈α≤Thus
␈↓ ↓H␈↓␈↓↓value␈↓ (CONS (QUOTE A) (QUOTE (B C))) = (A B C).
␈↓ ↓H␈↓5.␈α␈↓↓value␈↓␈α(EQUAL␈α␈↓↓e1␈↓␈α␈↓↓e2)␈↓␈αis␈αT␈αif␈α␈↓↓value␈↓␈α␈↓↓e1␈↓␈α=␈α␈↓↓value␈↓␈α␈↓↓e2.␈↓␈αOtherwise,␈αits
␈↓ ↓H␈↓value␈α?␈α?␈α?␈α≤is␈α?␈α?␈α?␈α≤NIL.␈α?␈α?␈α?␈α≠ Thus
␈↓ ↓H␈↓␈↓↓value␈↓ (EQUAL (CAR (QUOTE (A B))) (QUOTE A)) = T.
␈↓ ↓H␈↓6.␈α␈↓↓value␈↓␈α(ATOM␈α
␈↓↓e)␈↓␈α=␈αT␈αif␈α
␈↓↓value␈↓␈α␈↓↓e␈↓␈αis␈αan␈α
atom;␈αotherwise␈αits␈αvalue␈α
is
␈↓ ↓H␈↓NIL.
␈↓ ↓H␈↓7.␈α∞␈↓↓value␈↓␈α
(COND(␈↓↓p␈↓β1␈↓↓␈α∞e␈↓β1␈↓↓)␈α
...␈α∞(p␈↓βn␈↓↓␈α∞e␈↓βn␈↓↓))␈α
=␈α∞value␈α
e␈↓βi␈↓,␈α∞where␈α
␈↓↓p␈↓βi␈↓␈α∞is␈α∞the␈α
the
␈↓ ↓H␈↓first of the ␈↓↓p␈↓'s whose value is not NIL. Thus
␈↓ ↓H␈↓␈↓↓value␈↓␈α(COND␈α
((ATOM␈α(QUOTE␈αA))␈α
(QUOTE␈αB))␈α((QUOTE␈α
T)
␈↓ ↓H␈↓(QUOTE C))) = B.
␈↓ ↓H␈↓8. An atom ␈↓↓v,␈↓ regarded as a variable, may have a value.
␈↓ ↓H␈↓9.␈α␈↓↓value␈↓␈α((LAMBDA␈α(␈↓↓v␈↓β1␈↓↓␈α...␈αv␈↓βn␈↓↓)␈αe)␈αe␈↓β1␈↓↓␈α...␈αe␈↓βn␈↓↓)␈↓␈αis␈αthe␈αsame␈αas␈α␈↓↓value e␈↓
␈↓ ↓H␈↓but␈α∂in␈α∂an␈α∂environment␈α∂in␈α∂which␈α∂the␈α∂variables␈α∂␈↓↓v␈↓β1␈↓↓ ... v␈↓βn␈↓↓␈↓␈α⊂take␈α∂the
␈↓ ↓H␈↓values␈α∩of␈α∩the␈α∩expressions␈α∩␈↓↓e␈↓β1␈↓↓ ... e␈↓βn␈↓↓␈↓␈α∩in␈α∩the␈α∪original␈α∩environment.
␈↓ ↓H␈↓Thus
␈↓ ↓H␈↓␈↓↓value␈↓␈α∞((LAMBDA␈α∞(X␈α∞Y)␈α∞(CONS␈α∞(CAR␈α∞X)␈α∞Y))␈α∞(QUOTE␈α∞(A␈α
B))
␈↓ ↓H␈↓(CDR (QUOTE (C D)))) = (A D).
␈↓ ↓H␈↓10.␈α
Here's␈αthe␈α
hard␈αone.␈α
␈↓↓value␈↓␈α((LABEL␈α
␈↓↓f␈↓␈α(LAMBDA␈α
␈↓↓(v␈↓β1␈↓↓␈α
...␈αv␈↓βn␈↓↓)
␈↓ ↓H␈↓↓e))␈αe␈↓β1␈↓↓␈α...␈α
e␈↓βn␈↓↓)␈↓␈αis␈αthe␈αsame␈α
as␈α␈↓↓value␈↓␈α((LAMBDA␈α(␈↓↓v␈↓β1␈↓↓␈α
...␈αv␈↓βn␈↓↓)␈αe)␈α
e␈↓β1␈↓↓␈α...
␈↓ ↓H␈↓↓e␈↓βn␈↓↓)␈↓␈α⊃with␈α⊃the␈α⊃additional␈α⊂rule␈α⊃that␈α⊃whenever␈α⊃␈↓↓(f a␈↓β1␈↓↓ ... a␈↓βn␈↓↓)␈↓␈α⊃must␈α⊂be
␈↓ ↓H␈↓evaluated,␈α∩␈↓↓f␈↓␈α∩is␈α∩replaced␈α∩by␈α∩(LABEL ␈↓↓f␈↓ (LAMBDA (␈↓↓v␈↓β1␈↓↓ ... v␈↓βn␈↓↓)␈α⊃e))␈↓.
␈↓ ↓H␈↓Lists beginning with LABEL define functions recursively.
␈↓ ↓H␈↓␈↓ α_This is the core of LISP, and here are more examples:
␈↓ ↓H␈↓␈↓↓value␈↓␈α∪(CAR␈α∪X)␈α∪=␈α∪(A␈α∪B)␈α∀if␈α∪␈↓↓value␈↓␈α∪X␈α∪=␈α∪((A␈α∪B)␈α∪C),␈α∀and␈α∪␈↓↓value␈↓
␈↓ ↓H␈↓((LABEL␈αFF␈α(LAMBDA␈α
(X)␈α(COND␈α((ATOM␈αX)␈α
X)␈α((QUOTE
␈↓ ↓H␈↓T)␈α∞(FF␈α
(CAR␈α∞X))))))␈α
(QUOTE␈α∞((A␈α
B)␈α∞C)))␈α
=␈α∞A.␈α∞ Thus␈α
((LABEL
␈↓ ↓H␈↓FF␈α⊂(LAMBDA␈α⊂(X)␈α⊂(COND␈α⊂((ATOM␈α⊂X)␈α⊂X)␈α⊂((QUOTE␈α⊃T)␈α⊂(FF
␈↓ ↓H␈↓(CAR␈α
X)))))),␈α∞is␈α
the␈α
LISP␈α∞name␈α
of␈α∞a␈α
function␈α
␈↓↓ff␈↓␈α∞such␈α
that␈α∞␈↓↓ff e␈↓␈α
is
␈↓ ↓H␈↓the␈α⊂first␈α⊂atom␈α⊂in␈α⊂the␈α⊂written␈α⊂form␈α⊂of␈α⊂␈↓↓e.␈↓␈α⊂Note␈α⊂that␈α⊂the␈α⊂list␈α⊂␈↓↓ff␈↓␈α∂is
␈↓ ↓H␈↓substituted for the atom FF twice.
␈↓ ↓H␈↓Difficult␈α↔mathematical␈α↔type␈α↔exercise:␈α↔Find␈α↔a␈α↔list␈α↔e␈α↔such␈α⊗that
␈↓ ↓H␈↓␈↓↓value e = e.␈↓
␈↓ ↓H␈↓␈↓αAbbreviations␈↓
␈↓ ↓H␈↓␈↓ α_The above LISP needs some abbreviations for practical use.
␈↓ ↓H␈↓1.␈α
The␈α
variables␈α
T␈α
and␈α
NIL␈α
are␈α
permanently␈α
assigned␈α
the␈α
values␈α
T
␈↓ ↓H␈↓and NIL, and NIL is the name of the null list ().
␈↓ ↓H␈↓2.␈α∞So␈α∞as␈α∞not␈α
to␈α∞describe␈α∞a␈α∞LISP␈α∞function␈α
each␈α∞time␈α∞it␈α∞is␈α∞used,␈α
we
␈↓ ↓H␈↓define␈α→it␈α_permanently␈α→by␈α_typing␈α→(DEFUN␈α_␈↓↓f␈α→(v␈↓β1␈↓↓␈α_...␈α→v␈↓βn␈↓↓)␈α_e)␈↓.
␈↓ ↓H␈↓Thereafter␈α∪␈↓↓(f␈α∩e␈↓β1␈↓↓␈α∪...␈α∪e␈↓βn␈↓↓)␈↓␈α∩is␈α∪evaluated␈α∪by␈α∩evaluating␈α∪␈↓↓e␈↓␈α∪with␈α∩the
␈↓ ↓H␈↓variables␈α_␈↓↓v␈↓β1␈↓↓, ... ,v␈↓βn␈↓↓␈↓␈α_taking␈α_the␈α→values␈α_␈↓↓value e␈↓β1␈↓↓, ... ,value e␈↓βn␈↓↓␈↓
␈↓ ↓H␈↓respectively.␈α∃ Thus,␈α∃after␈α∃we␈α∀define␈α∃(DEFUN␈α∃FF␈α∃(X)␈α∀(COND
␈↓ ↓H␈↓((ATOM␈αX)␈α
X)␈α(T␈α(FF␈α
(CAR␈αX))))),␈αtyping␈α
(FF␈α(QUOTE␈α
((A␈αB)
␈↓ ↓H␈↓C))), gets A from LISP.
␈↓ ↓H␈↓3. We have the permanent function definitions
␈↓ ↓H␈↓(DEFUN NULL (X) (EQUAL X NIL)) and
␈↓ ↓H␈↓(DEFUN CADR (X) (CAR (CDR X))),
␈↓ ↓H␈↓and similarly for arbitrary combinations of A and D.
␈↓ ↓H␈↓4.␈α(LIST␈α␈↓↓e␈↓β1␈↓↓␈α
...␈αe␈↓βn␈↓↓␈↓)␈αis␈α
defined␈αfor␈αeach␈α
␈↓↓n␈↓␈αto␈αbe␈α
(CONS␈α␈↓↓e␈↓␈↓β1␈↓␈α(CONS␈α
...
␈↓ ↓H␈↓(CONS ␈↓↓e␈↓␈↓βn␈↓ NIL))).
␈↓ ↓H␈↓5.␈α⊂(AND␈α⊂␈↓↓p␈↓␈α⊂␈↓↓q)␈↓␈α⊂abbreviates␈α⊃(COND␈α⊂(␈↓↓p␈↓␈α⊂␈↓↓q)␈↓␈α⊂(T␈α⊂NIL)).␈α⊃ ANDs␈α⊂with
␈↓ ↓H␈↓more␈αterms␈αare␈αdefined␈αsimilarly,␈αand␈αthe␈αpropositional␈αconnectives
␈↓ ↓H␈↓OR␈αand␈αNOT␈αare␈αused␈αin␈αabbreviating␈αcorresponding␈αconditional
␈↓ ↓H␈↓expressions.
␈↓ ↓H␈↓␈↓ α_Here are more examples of LISP function definitions:
␈↓ ↓H␈↓(DEFUN␈α∞ALT␈α∞(X)␈α∞(COND␈α∞((OR␈α∞(NULL␈α∞X)␈α∞(NULL␈α∞(CDR␈α∞X)))
␈↓ ↓H␈↓X) (T (CONS (CAR X) (ALT (CDDR X))))))
␈↓ ↓H␈↓defines␈α⊂a␈α⊂function␈α∂that␈α⊂gives␈α⊂alternate␈α∂elements␈α⊂of␈α⊂a␈α⊂list␈α∂starting
␈↓ ↓H␈↓with␈αthe␈αfirst␈αelement.␈α Thus␈α(ALT␈α(QUOTE␈α(A␈αB␈αC␈αD␈αE)))␈α=␈α(A
␈↓ ↓H␈↓C E).
␈↓ ↓H␈↓(DEFUN␈α
SUBST␈α
(X␈α
Y␈α
Z)␈α
(COND␈α
((ATOM␈α
Z)␈α
(COND␈α
((EQUAL
␈↓ ↓H␈↓Z␈αY)␈αX)␈α(T␈αZ)))␈α(T␈α(CONS␈α(SUBST␈αX␈αY␈α(CAR␈αZ))␈α(SUBST␈αX␈αY
␈↓ ↓H␈↓(CDR Z)))))),
␈↓ ↓H␈↓where␈αY␈α
is␈αan␈α
atom,␈αgives␈α
the␈αresult␈αof␈α
substituting␈αX␈α
for␈αY␈α
in␈αZ.
␈↓ ↓H␈↓Thus
␈↓ ↓H␈↓(SUBST␈α(QUOTE␈α(PLUS␈αX␈αY))␈α(QUOTE␈αV)␈α(QUOTE␈α(TIMES
␈↓ ↓H␈↓X V))) = (TIMES X (PLUS X Y)).
␈↓ ↓H␈↓␈↓ α_You␈α∩may␈α∩now␈α∪program␈α∩in␈α∩LISP.␈α∪ Call␈α∩LISP␈α∩on␈α∪a␈α∩time-
␈↓ ↓H␈↓sharing␈α≥computer,␈α≤define␈α≥some␈α≥functions,␈α≤type␈α≥in␈α≥a␈α≤LISP
␈↓ ↓H␈↓expression, and LISP will output its value on your terminal.
␈↓ ↓H␈↓αTHE LISP INTERPRETER WRITTEN IN LISP
␈↓ ↓H␈↓␈↓ α_The␈α⊂rules␈α⊂we␈α⊃have␈α⊂given␈α⊂for␈α⊂evaluating␈α⊃LISP␈α⊂expressions
␈↓ ↓H␈↓can␈α∩themselves␈α∩be␈α∩expressed␈α∩as␈α⊃a␈α∩LISP␈α∩function␈α∩(EVAL␈α∩␈↓↓e␈↓␈α⊃␈↓↓a),␈↓
␈↓ ↓H␈↓where␈α∀␈↓↓e␈↓␈α∀is␈α∀an␈α∀expression␈α∀to␈α∪be␈α∀evaluated,␈α∀and␈α∀␈↓↓a␈↓␈α∀is␈α∀a␈α∀list␈α∪of
␈↓ ↓H␈↓variable-value␈α∀pairs.␈α∀ ␈↓↓a␈↓␈α∀is␈α∀used␈α∀in␈α∀the␈α∀recursion␈α∀and␈α∀is␈α∪often
␈↓ ↓H␈↓initially␈α
NIL.␈α
The␈α∞long␈α
LISP␈α
expression␈α∞that␈α
follows␈α
is␈α∞just␈α
such
␈↓ ↓H␈↓an␈α
evaluator.␈α It␈α
is␈α
presented␈αas␈α
a␈αsingle␈α
LABEL␈α
expressions␈αwith
␈↓ ↓H␈↓all␈α≠auxiliary␈α~functions␈α≠also␈α~defined␈α≠by␈α≠LABEL␈α~expressions
␈↓ ↓H␈↓internally,␈αso␈αthat␈αit␈αreferences␈αonly␈αthe␈αbasic␈αfunction␈αof␈αLISP␈αand
␈↓ ↓H␈↓some␈αof␈αabbreviations␈αlike␈αCADR␈αand␈αfriends.␈α It␈αknows␈αabout␈αall
␈↓ ↓H␈↓the␈α⊃functions␈α⊃that␈α⊂are␈α⊃used␈α⊃in␈α⊂its␈α⊃own␈α⊃definition␈α⊂so␈α⊃that␈α⊃it␈α⊂can
␈↓ ↓H␈↓evaluate␈αitself␈αevaluating␈αsome␈α
other␈αexpression.␈α It␈αdoes␈α
not␈αknow
␈↓ ↓H␈↓about␈α∩DEFUNs␈α∩or␈α∩any␈α∩features␈α∩of␈α∩LISP␈α∩not␈α∩explained␈α∩in␈α⊃this
␈↓ ↓H␈↓micro-manual␈αsuch␈αas␈α
functional␈αarguments,␈αproperty␈αlist␈α
functions,
␈↓ ↓H␈↓input-output, or sequential programs.
␈↓ ↓H␈↓␈↓ α_The␈α∂function␈α∂EVAL␈α∂can␈α∂serve␈α∂as␈α∂an␈α∂interpreter␈α∂for␈α∞LISP,
␈↓ ↓H␈↓and␈α
LISP␈α
interpreters␈αare␈α
actually␈α
made␈α
by␈αhand-compiling␈α
EVAL
␈↓ ↓H␈↓into␈α∞machine␈α∞language␈α
or␈α∞by␈α∞cross-compiling␈α
it␈α∞on␈α∞a␈α∞machine␈α
for
␈↓ ↓H␈↓which a LISP system already exists.
␈↓ ↓H␈↓␈↓ α_The␈α∩definition␈α∩would␈α∩have␈α⊃been␈α∩easier␈α∩to␈α∩follow␈α∩had␈α⊃we
␈↓ ↓H␈↓defined␈α∩auxiliary␈α∩functions␈α∩separately␈α∩rather␈α∩than␈α∪include␈α∩them
␈↓ ↓H␈↓using␈αLABEL.␈α However,␈αwe␈αwould␈αthen␈αhave␈αneeded␈αproperty␈αlist
␈↓ ↓H␈↓functions␈α∃in␈α∀order␈α∃to␈α∀make␈α∃the␈α∀EVAL␈α∃self-applicable.␈α∀ These
␈↓ ↓H␈↓auxiliary␈αfunctions␈αare␈αEVLIS␈αwhich␈αevaluates␈αlists␈αof␈αexpressions,
␈↓ ↓H␈↓EVCOND␈αwhich␈αevaluates␈αconditional␈αexpressions,␈αASSOC␈α
which
␈↓ ↓H␈↓finds␈αthe␈αvalue␈αassociated␈αwith␈αa␈αvariable␈αin␈αthe␈αenvironment,␈αand
␈↓ ↓H␈↓PAIRUP which pairs up the corresponding elements of two lists.
␈↓ ↓H␈↓␈↓ α_Here is EVAL.
␈↓ ↓H␈↓(LABEL EVAL (LAMBDA (E A)
␈↓ ↓H␈↓ (COND ((ATOM E)
␈↓ ↓H␈↓ (COND ((EQ E NIL) NIL)
␈↓ ↓H␈↓ ((EQ E T) T)
␈↓ ↓H␈↓ (T (CDR ((LABEL
␈↓ ↓H␈↓ ASSOC
␈↓ ↓H␈↓ (LAMBDA (E A)
␈↓ ↓H␈↓ (COND ((NULL A) NIL)
␈↓ ↓H␈↓ ((EQ E (CAAR A)) (CAR A))
␈↓ ↓H␈↓ (T (ASSOC E (CDR A))))))
␈↓ ↓H␈↓ E
␈↓ ↓H␈↓ A)))))
␈↓ ↓H␈↓ ((ATOM (CAR E))
␈↓ ↓H␈↓ (COND ((EQ (CAR E) (QUOTE QUOTE)) (CADR E))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CAR))
␈↓ ↓H␈↓ (CAR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CDR))
␈↓ ↓H␈↓ (CDR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CADR))
␈↓ ↓H␈↓ (CADR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CADDR))
␈↓ ↓H␈↓ (CADDR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CAAR))
␈↓ ↓H␈↓ (CAAR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CADAR))
␈↓ ↓H␈↓ (CADAR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CADDAR))
␈↓ ↓H␈↓ (CADDAR (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE ATOM))
␈↓ ↓H␈↓ (ATOM (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE NULL))
␈↓ ↓H␈↓ (NULL (EVAL (CADR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE CONS))
␈↓ ↓H␈↓ (CONS (EVAL (CADR E) A) (EVAL (CADDR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE EQ))
␈↓ ↓H␈↓ (EQ (EVAL (CADR E) A) (EVAL (CADDR E) A)))
␈↓ ↓H␈↓ ((EQ (CAR E) (QUOTE COND))
␈↓ ↓H␈↓ ((LABEL EVCOND
␈↓ ↓H␈↓ (LAMBDA (U A) (COND ((EVAL (CAAR U) A)
␈↓ ↓H␈↓ (EVAL (CADAR U)
␈↓ ↓H␈↓ A))
␈↓ ↓H␈↓ (T (EVCOND (CDR U)
␈↓ ↓H␈↓ A)))))
␈↓ ↓H␈↓ (CDR E)
␈↓ ↓H␈↓ A))
␈↓ ↓H␈↓ (T (EVAL (CONS (CDR ((LABEL
␈↓ ↓H␈↓ ASSOC
␈↓ ↓H␈↓ (LAMBDA (E A)
␈↓ ↓H␈↓ (COND
␈↓ ↓H␈↓ ((NULL A) NIL)
␈↓ ↓H␈↓ ((EQ E (CAAR A))
␈↓ ↓H␈↓ (CAR A))
␈↓ ↓H␈↓ (T (ASSOC E
␈↓ ↓H␈↓ (CDR A))))))
␈↓ ↓H␈↓ (CAR E)
␈↓ ↓H␈↓ A))
␈↓ ↓H␈↓ (CDR E))
␈↓ ↓H␈↓ A))))
␈↓ ↓H␈↓ ((EQ (CAAR E) (QUOTE LAMBDA)
␈↓ ↓H␈↓ (EVAL (CADDAR E)
␈↓ ↓H␈↓ ((LABEL FFAPPEND
␈↓ ↓H␈↓ (LAMBDA (U V)
␈↓ ↓H␈↓ (COND ((NULL U) V)
␈↓ ↓H␈↓ (T (CONS (CAR U)
␈↓ ↓H␈↓ (FFAPPEND (CDR U)
␈↓ ↓H␈↓ V))))))
␈↓ ↓H␈↓ ((LABEL
␈↓ ↓H␈↓ PAIRUP
␈↓ ↓H␈↓ (LAMBDA (U V)
␈↓ ↓H␈↓ (COND ((NULL U) NIL)
␈↓ ↓H␈↓ (T (CONS (CONS (CAR U) (CAR V))
␈↓ ↓H␈↓ (PAIRUP (CDR U)
␈↓ ↓H␈↓ (CDR V)))))))
␈↓ ↓H␈↓ (CADAR E)
␈↓ ↓H␈↓ ((LABEL
␈↓ ↓H␈↓ EVLIS
␈↓ ↓H␈↓ (LAMBDA (U A)
␈↓ ↓H␈↓ (COND ((NULL U) NIL)
␈↓ ↓H␈↓ (T (CONS (EVAL (CAR U) A)
␈↓ ↓H␈↓ (EVLIS (CDR U)
␈↓ ↓H␈↓ A))))))
␈↓ ↓H␈↓ (CDR E)
␈↓ ↓H␈↓ A))
␈↓ ↓H␈↓ A)))
␈↓ ↓H␈↓ ((EQ (CAAR E) (QUOTE LABEL))
␈↓ ↓H␈↓ (EVAL (CONS (CADDAR E) (CDR E))
␈↓ ↓H␈↓ (CONS (CONS (CADAR E) (CAR E)) A)))))
␈↓ ↓H␈↓)